package euler.p101_150;

import euler.MainEuler;

public class Euler112 extends MainEuler {
    /*
        Working from left-to-right if no digit is exceeded by the
        digit to its left it is called an increasing number;
        for example, 134468.

        Similarly if no digit is exceeded by the digit to its
        right it is called a decreasing number; for example, 66420.

        We shall call a positive integer that is neither increasing
        nor decreasing a "bouncy" number; for example, 155349.

        Clearly there cannot be any bouncy numbers below one-hundred,
        but just over half of the numbers below one-thousand (525)
        are bouncy. In fact, the least number for which the proportion
        of bouncy numbers first reaches 50% is 538.

        Surprisingly, bouncy numbers become more and more common and by
        the time we reach 21780 the proportion of bouncy numbers is equal to 90%.

        Find the least number for which the proportion of bouncy
        numbers is exactly 99%.
     */
    public String resolve() {
        int bouncies = 0;
        int i = 100;
        while (!(bouncies*100 == i*99)) {
            i++;
            if (isBouncy(i)) {
                bouncies++;
            }
        }

        return String.valueOf(i);
        // 1587000
    }

    private boolean isBouncy(int n) {
        if (n < 100) {
            return false;
        }

        int d = n % 10;
        boolean increasing = true;
        boolean decreasing = true;
        while ((increasing || decreasing) && n > 0) {
            int da = n % 10;
            n/=10;
            decreasing = decreasing && da >= d;
            increasing = increasing && da <= d;
            d = da;
        }

        return !(increasing || decreasing);
    }
}
